package org.jeecg.modules.system.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.jeecg.common.aspect.annotation.Dict;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;

import java.io.Serializable;
import java.util.Date;

/**
 * 员工信息表
 */
@Data
@TableName("sys_employee")
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class SysEmployee implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
    /**
     * 主键ID
     */
    @TableId(type = IdType.ASSIGN_ID)
    private String id;
    
    /**
     * 员工编号
     */
    @Excel(name = "员工编号", width = 15, orderNum = "1")
    private String empNo;
    
    /**
     * 员工姓名
     */
    @Excel(name = "员工姓名", width = 15, orderNum = "2")
    private String empName;
    
    /**
     * 用户名
     */
    private String username;
    
    /**
     * 密码
     */
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private String password;
    
    /**
     * 密码盐
     */
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private String salt;
    
    /**
     * 头像
     */
    @Excel(name = "头像", width = 15, type = 2)
    private String avatar;
    
    /**
     * 性别（1男 2女）
     */
    @Excel(name = "性别", width = 10, orderNum = "3", dicCode = "sex")
    @Dict(dicCode = "sex")
    private Integer sex;
    
    /**
     * 手机号
     */
    @Excel(name = "手机号", width = 15, orderNum = "4")
    private String phone;
    
    /**
     * 邮箱
     */
    @Excel(name = "邮箱", width = 20)
    private String email;
    
    /**
     * 身份证号
     */
    private String idCard;
    
    /**
     * 出生日期
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date birthday;
    
    /**
     * 部门ID
     */
    private String departId;
    
    /**
     * 部门名称
     */
    @Excel(name = "所属部门", width = 20, orderNum = "5")
    @TableField(exist = false)
    private String departName;
    
    /**
     * 职位ID
     */
    private String positionId;
    
    /**
     * 职位名称
     */
    @Excel(name = "职位", width = 15)
    private String positionName;
    
    /**
     * 入职日期
     */
    @Excel(name = "入职日期", width = 15, orderNum = "6", format = "yyyy-MM-dd")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date hireDate;
    
    /**
     * 离职日期
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date leaveDate;
    
    /**
     * 工作状态（1在职 2离职）
     */
    @Excel(name = "工作状态", width = 15, orderNum = "7", dicCode = "work_status")
    @Dict(dicCode = "work_status")
    private Integer workStatus;
    
    /**
     * 工作年限
     */
    private Integer workYears;
    
    /**
     * 账号状态（1正常 2冻结）
     */
    @Dict(dicCode = "user_status")
    private Integer status;
    
    /**
     * 租户ID
     */
    private Integer tenantId;
    
    /**
     * 创建人
     */
    private String createBy;
    
    /**
     * 创建时间
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    
    /**
     * 更新人
     */
    private String updateBy;
    
    /**
     * 更新时间
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;
    
    /**
     * 删除标识（0-正常,1-已删除）
     */
    private Integer delFlag;
    
    /**
     * 备注
     */
    private String remark;
    
    /**
     * 照片
     */
    @Excel(name = "照片", width = 15, type = 2)
    private String photo;
    
    /**
     * 负责部门IDs（多个部门用逗号分隔）
     */
    private String departIds;
    
    /**
     * 用户身份（1普通员工 2上级）
     */
    @Dict(dicCode = "user_identity")
    private Integer userIdentity;
    
    /**
     * 优化软件类型（0长风 1新格尔）
     */
    @Dict(dicCode = "optimize_soft_type")
    private Integer optimizeSoftType;
    
    /**
     * 门窗生产类型（0窗户 1门）
     */
    @Excel(name = "门窗生产类型", width = 15, orderNum = "8", dicCode = "window_door_type")
    @Dict(dicCode = "window_door_type")
    private Integer windowDoorType;
    
    /**
     * 负责部门IDs（临时存储，前端传递使用）
     */
    @TableField(exist = false)
    private String directorDepartIds;
} 